home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / compiler / future.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  3KB  |  89 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. '''Parser for future statements
  5.  
  6. '''
  7. from compiler import ast, walk
  8.  
  9. def is_future(stmt):
  10.     '''Return true if statement is a well-formed future statement'''
  11.     if not isinstance(stmt, ast.From):
  12.         return 0
  13.     
  14.     if stmt.modname == '__future__':
  15.         return 1
  16.     else:
  17.         return 0
  18.  
  19.  
  20. class FutureParser:
  21.     features = ('nested_scopes', 'generators', 'division')
  22.     
  23.     def __init__(self):
  24.         self.found = { }
  25.  
  26.     
  27.     def visitModule(self, node):
  28.         stmt = node.node
  29.         for s in stmt.nodes:
  30.             if not self.check_stmt(s):
  31.                 break
  32.                 continue
  33.         
  34.  
  35.     
  36.     def check_stmt(self, stmt):
  37.         if is_future(stmt):
  38.             for name, asname in stmt.names:
  39.                 if name in self.features:
  40.                     self.found[name] = 1
  41.                     continue
  42.                 raise SyntaxError, 'future feature %s is not defined' % name
  43.             
  44.             stmt.valid_future = 1
  45.             return 1
  46.         
  47.         return 0
  48.  
  49.     
  50.     def get_features(self):
  51.         '''Return list of features enabled by future statements'''
  52.         return self.found.keys()
  53.  
  54.  
  55.  
  56. class BadFutureParser:
  57.     '''Check for invalid future statements'''
  58.     
  59.     def visitFrom(self, node):
  60.         if hasattr(node, 'valid_future'):
  61.             return None
  62.         
  63.         if node.modname != '__future__':
  64.             return None
  65.         
  66.         raise SyntaxError, 'invalid future statement'
  67.  
  68.  
  69.  
  70. def find_futures(node):
  71.     p1 = FutureParser()
  72.     p2 = BadFutureParser()
  73.     walk(node, p1)
  74.     walk(node, p2)
  75.     return p1.get_features()
  76.  
  77. if __name__ == '__main__':
  78.     import sys
  79.     from compiler import parseFile, walk
  80.     for file in sys.argv[1:]:
  81.         print file
  82.         tree = parseFile(file)
  83.         v = FutureParser()
  84.         walk(tree, v)
  85.         print v.found
  86.         print 
  87.     
  88.  
  89.